package com.sc.nft.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.UserInfo;
import com.sc.nft.entity.dto.*;
import com.sc.nft.entity.vo.*;
import com.sc.nft.sup.PageRequest;

public interface ImGroupService {

    /**
     * 查询组是否存在
     *
     * @param id
     * @return
     */
    Boolean groupIsExist(Long id);

    /**
     * 通过daoId,获取腾讯的群组
     *
     * @param id
     * @return
     */
    ImGroupInfoVO getByDaoIdGroup(Long id);

    /**
     * 用户加入群组
     *
     * @param id
     */
    void userAddGroup(String id, UserInfo user);

    /**
     * 后台创建群组
     *
     * @param imCreateGroupDTO
     */
    void adminCreateGroup(ImCreateGroupDTO imCreateGroupDTO);

    /**
     * 解散群
     *
     * @param groupId
     */
    void adminDestroyGroup(String groupId);

    /**
     * 群列表
     *
     * @param pageRequest
     * @return
     */
    Page<AdminGroupListVO> adminGroupList(PageRequest pageRequest);

    /**
     * 修改群
     *
     * @param adminModifierGroupDTO
     */
    void modifierGroup(AdminModifierGroupDTO adminModifierGroupDTO);

    /**
     * 搜索用户加入群组
     *
     * @param searchUserInfoAddGroupDTO
     */
    void searchUserInfoAddGroup(SearchUserInfoAddGroupDTO searchUserInfoAddGroupDTO);

    /**
     * 转让群主
     *
     * @param transferGroupMasterDTO
     */
    void transferGroupMaster(TransferGroupMasterDTO transferGroupMasterDTO);

    /**
     * 所有用户加入群组
     */
    Boolean allUserAddGroup();

    void voluntarilyAllUserAddGroup();

    /**
     * 获取当前可用群组.
     *
     * @return
     */
    AvailableGroupDTO getAvailableGroup();

    /**
     * 用户创建群组
     *
     * @param userCreationGroupDTO
     */
    String userCreationGroup(UserCreationGroupDTO userCreationGroupDTO);

    /**
     * 获取群聊二维码.
     *
     * @param groupId
     * @return
     */
    GenerateTwoDimensionalCodeVO generateTwoDimensionalCode(String groupId);

    /**
     * 封禁群组or解封群组
     *
     * @param groupId
     * @param operation
     */
    void groupBanned(String groupId, Boolean operation);

    /**
     * 用户在群组中的身份
     *
     * @param groupId
     * @return
     */
    UserIsExistGroupVO userIsExistGroup(String groupId);

    /**
     * 用户注册IM
     *
     * @param user
     */
    void userAddImGroup(UserInfo user);

    /**
     * 是否为官方群
     *
     * @param groupId
     * @return
     */
    Boolean isOfficial(String groupId);

    /**
     * 群是否禁言
     *
     * @param groupId
     * @return
     */
    ImGroupInfoAllResultVO.GroupInfoDTO groupIsBanned(String groupId);

}
